随机变量的测量值服从特定分布, 生活中很多连续型随机变量服从正态分布,例如人体身高、作物产量等。
离散型随机变量满足二项分布、泊松分布等,例如表示基于 RNA-seq 数据得到的基因表达丰度计数值可用泊松分布来近似, 而在做基因表达差异分析时,多采用负二项分布模型进行分析。
在统计中有许多不同类型的分布, 如正态分布、 $t$ 分布、卡方分布、 $F$ 分布等。已知 特定的分布可以计算概率密度值、累积分布函数 (CDF)、分位数, 并可以根据分布产生随机 样本, 在R语言中有相应的函数。 R语言中的统计函数名称由前缀和后缀组成, 前缀 d
表示 密度,p
表示CDF,q
表示分位数,r
表示随机。后缀表示概率分布类型。例如dnorm()
函数名称后缀 norm 表示正态分布, 该函数计算服从正态分布的某变量值的概率密度:计算服从正态分布的某变量取值时的CDF值,qnorm
根据给定的概率值计算对应的分位数,rnorm
产生服从特定正态分布的一组样本值。常用的概率分布及其函数见下表。
分布名称 | 缩写 | 参数 | 函数 |
---|---|---|---|
正㚐分布 | norm | mean, sd | dnorm, pnorm, qnorm, rnorm |
二项分布 | binom | size, prob | dbinom, pbinom, qbinom, rbinom |
泊松分布 | pois | lambda | dpois, ppois, qpois, rpois |
超几何分布 | hyper | m,n,k | dhyper, phyper, qhyper, rhyper |
卡方分布 | chisq | df, nep | dehisq, pchisq, qchisq, rehisq |
t 分布 | 1 | df, nep | dt,pt,qt,rt |
F 分布 | f | df1,df1,ncp | df,pf,qf,rf |
负二项分布 | nbinom | size, prob | dnbinom, pnbinom, qnbinom, mbinom |
指数分布 | exp | rate | dexp, pexp, qexp, rexp |
例 随机变量 $X$ 满足标倠正态分布, 计算CDF 为 $0.95$ 时的分位数。
qnorm(0.95) # 1.64485362695147
qnorm()
函数的语法格式是qnorm(p, mean =0, sd=1, lower.tail = TRUE, log. p= FALSE)
,
例子中使用缺省参数 mean =0, sd=1, lower.tail = TRUE
。参数 mean
表示正态分布的均值; 参数 sd
表示标准差; 参数 lower. tail
为 TRUE 时表示计算 $P[X \leqslant x]=0.95$ 的分位数 $x$ 值, 否则计算 $P[X>x]=0.95$ 的 $x$ 值。
例 某地区有 100 万人口, 在 1 年内每 10 万人中约 40 人会被诊断为肺癌。在某一年内该地区新确诊肺癌的人数是 200 人, 假设每年新患肺癌人数服从泊松分布, 计算一年内新患肺癌数低于 200 人的概率是多少?
ppois(20, 40)
ppois()
函数的语法格式是ppois(q, lambda, lower.tail = TRUE, log.p = FALSE)
, 在例中, 泊松分布的参数 lambda 等于 40 , 其含义是 1 年内每 10 万人中被新诊断为肺癌 的人数, 利用泊松分布公式计算 CDF, 可以得到的结论是该地区每年新患肺癌人数低于 200 人的概率为 $0.0003683006$ 。
摘自:
qnorm(0.95)
ppois(20,40)
help(ppois)
require(graphics)
-log(dpois(0:7, lambda = 1) * gamma(1+ 0:7)) # == 1
Ni <- rpois(50, lambda = 4); table(factor(Ni, 0:max(Ni)))
1 - ppois(10*(15:25), lambda = 100) # becomes 0 (cancellation)
ppois(10*(15:25), lambda = 100, lower.tail = FALSE) # no cancellation
par(mfrow = c(2, 1))
x <- seq(-0.01, 5, 0.01)
plot(x, ppois(x, 1), type = "s", ylab = "F(x)", main = "Poisson(1) CDF")
plot(x, pbinom(x, 100, 0.01), type = "s", ylab = "F(x)",
main = "Binomial(100, 0.01) CDF")
## The (limit) case lambda = 0 :
stopifnot(identical(dpois(0,0), 1),
identical(ppois(0,0), 1),
identical(qpois(1,0), 0))
0 1 2 3 4 5 6 7 8 9 0 2 8 9 11 11 5 3 0 1